package com.lelouch.examplecode.javabasic.jvm.model;

public class InternDifference {
    public static void main(String[] args) {
        String s = new String("a");//堆中，常量池中均有"a"，s指向堆中的"a"
        s.intern();//发现常量池中有“a”，所以返回指向常量池中的"a"
        String s2 = "a";//发现常量池中有“a”，所以返回指向常量池中的"a"
        System.out.println(s == s2);//false


        String s5=new String("a");
        String s6= new String("a");//s5==s6为false
        //System.out.println(s5==s6);
        String s3 = s5+s6;//只是在堆中生成"aa",常量池中没有
        //String s3 = new String("aa");
        s3.intern();//发现常量池中没有"aa"，所以生成对堆中"aa"的引用，放入到常量池中
        String s4 = "aa";//发现常量池中有"aa"的引用，所以返回给s4，s3和s4引用的是堆中的"aa"
        System.out.println(s3 == s4);//true
    }
}
